import request from './request'
import {
    buildQueryString
} from "../utils/url"

/**
 * 调用综合搜索接口查询产品列表
 *
 * @param {string} keyword - 搜索关键词，用于匹配产品名称、描述等字段
 * @param {number} page - 页码，从1开始，与后端分页逻辑保持一致
 * @param {number} pageSize - 每页显示的产品数量，范围建议1-100
 * @returns {Promise<import('../types').PageResult<import('../types').ProductVo>>}
 *          返回Promise对象，resolve时为产品分页结果，包含总条数、当前页数据等
 * @throws {Error} 当参数无效或请求失败时抛出错误
 * @example
 * // 搜索关键词为"手机"的第一页数据，每页10条
 * queryProductsByComprehensive("手机", 1, 10)
 *   .then(result => {
 *     console.log("总条数:", result.total);
 *     console.log("当前页产品:", result.list);
 *   })
 *   .catch(error => {
 *     console.error("搜索失败:", error.message);
 *   });
 * @description
 * 函数内部会自动处理：
 * 1. 参数.trim()去除关键词首尾空格
 * 2. 通过buildQueryString构建符合URL规范的查询字符串
 * 3. 调用request.get发送GET请求到综合搜索接口
 * 需确保全局存在buildQueryString函数和request工具
 */
export const queryProductsByComprehensive = (keyword, page, pageSize) => {
    const params = {
        keyword: keyword.trim(),
        page: page,
        pageSize: pageSize
    }
    const queryStr = buildQueryString(params);
    return request.get(`/search/comprehensive?${queryStr}`)
}

/**
 * 根据销量查询商品列表
 * @param {string} keyword - 搜索关键词，用于模糊匹配商品名称
 * @param {number} page - 当前页码，用于分页查询
 * @param {number} pageSize - 每页显示的商品数量，用于分页控制
 * @returns {Promise} 返回一个Promise对象，resolve时为接口返回的商品列表数据
 */
export const queryProductsBySales = (keyword, page, pageSize) => {
    // 构建请求参数对象
    const params = {
        keyword: keyword.trim(), // 去除关键词首尾空格，避免无效空格影响搜索结果
        page: page, // 分页参数：当前页码
        pageSize: pageSize // 分页参数：每页条数
    }
    // 将参数对象转换为URL查询字符串（如：keyword=手机&page=1&pageSize=10）
    const queryStr = buildQueryString(params);
    // 发送GET请求到销量搜索接口，携带查询参数，并返回请求Promise
    return request.get(`/search/sales?${queryStr}`)
}
/**
 * 根据发布查询商品列表
 * @param {string} keyword - 搜索关键词，用于模糊匹配商品名称
 * @param {number} page - 当前页码，用于分页查询
 * @param {number} pageSize - 每页显示的商品数量，用于分页控制
 * @returns {Promise} 返回一个Promise对象，resolve时为接口返回的商品列表数据
 */
export const queryProductsByTime = (keyword, page, pageSize) => {
    // 构建请求参数对象
    const params = {
        keyword: keyword.trim(), // 去除关键词首尾空格，避免无效空格影响搜索结果
        page: page, // 分页参数：当前页码
        pageSize: pageSize // 分页参数：每页条数
    }
    // 将参数对象转换为URL查询字符串（如：keyword=手机&page=1&pageSize=10）
    const queryStr = buildQueryString(params);
    // 发送GET请求到销量搜索接口，携带查询参数，并返回请求Promise
    return request.get(`/search/sales?${queryStr}`)
}
/**
 * 根据价格升序商品列表
 * @param {string} keyword - 搜索关键词，用于模糊匹配商品名称
 * @param {number} page - 当前页码，用于分页查询
 * @param {number} pageSize - 每页显示的商品数量，用于分页控制
 * @returns {Promise} 返回一个Promise对象，resolve时为接口返回的商品列表数据
 */
export const queryProductsByPriceAsc = (keyword, page, pageSize) => {
    // 构建请求参数对象
    const params = {
        keyword: keyword.trim(), // 去除关键词首尾空格，避免无效空格影响搜索结果
        page: page, // 分页参数：当前页码
        pageSize: pageSize, // 分页参数：每页条数
        orderBy: 'asc'
    }
    // 将参数对象转换为URL查询字符串（如：keyword=手机&page=1&pageSize=10）
    const queryStr = buildQueryString(params);
    // 发送GET请求到销量搜索接口，携带查询参数，并返回请求Promise
    return request.get(`/search/price?${queryStr}`)
}

/**
 * 根据价格降序商品列表
 * @param {string} keyword - 搜索关键词，用于模糊匹配商品名称
 * @param {number} page - 当前页码，用于分页查询
 * @param {number} pageSize - 每页显示的商品数量，用于分页控制
 * @returns {Promise} 返回一个Promise对象，resolve时为接口返回的商品列表数据
 */
export const queryProductsByPriceDesc = (keyword, page, pageSize) => {
    // 构建请求参数对象
    const params = {
        keyword: keyword.trim(), // 去除关键词首尾空格，避免无效空格影响搜索结果
        page: page, // 分页参数：当前页码
        pageSize: pageSize, // 分页参数：每页条数
        orderBy: 'desc'
    }
    // 将参数对象转换为URL查询字符串（如：keyword=手机&page=1&pageSize=10）
    const queryStr = buildQueryString(params);
    // 发送GET请求到销量搜索接口，携带查询参数，并返回请求Promise
    return request.get(`/search/price?${queryStr}`)
}